package cn.kogee.system.service.impl;

import cn.kogee.basic.service.impl.BaseServiceImpl;
import cn.kogee.system.domain.Menu;
import cn.kogee.system.mapper.MenuMapper;
import cn.kogee.system.service.IMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 业务实现类：
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements IMenuService {
   @Autowired
   private MenuMapper menuMapper;

    /**
     * 无限树级
     * @return
     */
    @Override
    public List<Menu> menuTree() {
        //查询出所有部门数据
        List<Menu> menus = menuMapper.loadAll();
        //将上级部门数据保存到map中
        Map<Long, Menu> map = new HashMap<>();
        //遍历所有部门数据，以部门ID作为Key,整个部门对象作为value存入map中
        for (Menu menu : menus) {
            //遍历所有部门数据，以菜单ID作为Key,整个菜单对象作为value存入map中
            map.put(menu.getId(),menu);
        }
        //创建新的菜单集合
        ArrayList<Menu> menuTree = new ArrayList<>();
        //再次遍历所有部门数据
        for (Menu menu : menus) {
            //如果没有上级部门就作为顶级菜单存入上级
            if(menu.getParentId()==null){
                menuTree.add(menu);
            }else {
                //如果有上级部门ID说明不是顶级部门通过上级部门ID作为key拿到上级部门数据
                Menu parmenu = map.get(menu.getParentId());
                //将部门数据设置到上级部门Children中
                parmenu.getChildren().add(menu);
            }
        }
            return menuTree;
        }
}
